The descriptions of the indicators and monitoring frameworks come from this UN document.
Both of these indicators are part of Sustainable Development Goal 11: Make cities and human settlements inclusive, safe, resilient and sustainable.
Load packages, write utility functions, set options
source("~scripts/00 - Admin.R")
## Warning: package 'ggplot2' was built under R version 4.0.2
## Warning: package 'tibble' was built under R version 4.0.2
## Warning: package 'osmplotr' was built under R version 4.0.2
source("~scripts/01 - Utility Functions.R")
tmap_mode("view")
tmap_options(basemaps = "Stamen.Terrain")
SDG target 11.2 is By 2030, provide access to safe, affordable, accessible and sustainable transport systems for all, improving road safety, notably by expanding public transport, with special attention to the needs of those in vulnerable situations, women, children, persons with disabilities and older persons. Source.
In separate reports, the UN has proposed two different indicators:
Proportion of population that has convenient access to public transport, by sex, age and persons with disabilities.Percentage of people within 0.5 km of public transit running at least every 20 minutesWhat percentages of the total populations of Baltimore, Minneapolis, and New Orleans proper have access to public transit?
Public transit includes stops, platforms, and/or terminals for any buses, trams / trolleys / streetcars, light rail, metros / subways, and ferries mapped in OpenStreetMap for the cities. Access includes having at least one such stop, platform, or terminal within 0.5km (defined three different ways, described below).
Note that the UN indicator stipulates that the transit run at least every 20 minutes, but headway information (stored in the interval=* tag) is not well populated on OSM - only about 8,000 total uses globally compared to over 190,000 bus routes mapped. Incorporating headways into the analysis requires an external reference dataset such as transit agency GTFS feeds (using reference datasets probably relevant for the completion metrics work).
Methodology (for each city):
Download census block groups with population
Split into 1/10th square mile hexagonal grid cells
Interpolate population for each cell by area. If a cell is fully contained within a block group, then that cell receives a proportion of the block group’s population that is equal to the proportion of the block group’s area that the cell occupies (i.e., 1/10th square mile divided by block group’s area). Where grid cells overlap multiple block groups, populations from the several block groups are allocated proportionally.
Download transit point data from OSM.
Find percentage of population within 0.5km to a transit stop.
New Orleans has very few transit stops mapped, so an extremely low percentage of transit access is expected.
grids_summary <- readRDS("~objects/30/32_grids_summary.RDS")
for(i in seq_along(grids_summary)) {
print(
kable(grids_summary[[i]], caption = names(grids_summary)[i], longtable = F, align = "l") %>%
kable_styling(font_size = 14, latex_options = "repeat_header", full_width = FALSE)
)
}
| hasTransit | TotPop | prop |
|---|---|---|
| no | 104665 | 0.1702662 |
| yes | 510049 | 0.8297338 |
| hasTransit | TotPop | prop |
|---|---|---|
| no | 64280 | 0.1560338 |
| yes | 347682 | 0.8439662 |
| hasTransit | TotPop | prop |
|---|---|---|
| no | 335271 | 0.860627 |
| yes | 54295 | 0.139373 |
An example of how the calculation was done for four of the grid cells
grids <- readRDS("~objects/30/32_grids.RDS")
pubTrans <- readRDS("~objects/20/22_pubTrans.RDS")
tm_shape(grids$Baltimore[c(462, 498, 534, 572),]) + tm_polygons(col = "blue", alpha = 0.3) +
tm_shape(pubTrans$Baltimore) + tm_dots(col = "red")